<?php
/**
 *   FileName: FileHelper.php
 *   Created: 12:30 PM 25/02/2012
 *   Author:
 *   Description: Class FileHelper giúp thao tác với tệp tin và thư mục
*/
class FileHelper {
    /**
     *  Lấy phần mở rộng của tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *  Results: phần mở rộng của tệp hoặc null nếu tệp không tồn tại
    */ 
	public static function GetFileExtension($filePath){
    	if(!file_exists($filePath)){
           return false;
       }
       return strtolower(pathinfo($filePath, PATHINFO_EXTENSION));// $info['extension'];
	}
    
	/**
     *  Lấy tên tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *  Results: tên của tệp hoặc null nếu tệp không tồn tại
    */
	public static function GetFileName($filePath){
		if(!file_exists($filePath)){
           return false;
       }
       $exts = '.'.self::GetFileExtension($filePath);
       return basename($filePath,$exts);
	}
    
	/**
     *  Lấy kích thước tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @unit: đơn vị tính 'B', 'KB', 'MB'
     *  Results: kích thước tệp hoặc 0 nếu tệp không hợp lệ
    */
	public static function GetFileSize($filePath, $unit = 'KB'){
		if(strcmp($unit,'KB')){
           return filesize($filePath)/(1024);
       }
	   if(strcmp($unit,'MB')){
           return filesize($filePath)/(1024*1024);
       }
	}   
	/**
     *  Ðọc nội dung tệp theo kiểu văn bản
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *  Results: nội dung tệp hoặc null nếu tệp không hợp lệ
    */
	public static function ReadText($filePath){
    	if(!file_exists($filePath)){
          return false;
     	}
     	return file_get_contents($filePath);
	}
    
	/**
     *  Ghi nội dung tệp theo kiểu văn bản
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @data: dữ liệu cần ghi
     *  Results: true nếu thành công và false nếu thất bại
    */
	public static function WriteText($filePath, $data){
		  $handle = fopen($filePath, 'w');
		  fwrite($handle, $data);
		  fclose($handle);
		  return true;
	}
    
	/**
     *  Ghi nội dung vào cuối tệp theo kiểu vãn bản
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @data: dữ liệu cần ghi
     *  Results: true nếu thành công và false nếu thất bại
    */
	public static function AppendText($filePath, $data){
      $handle = fopen($filePath, 'a');
      fwrite($handle, $data);
	  self::WriteText($filePath, $data);
      fclose($handle);
      return true;
    }
	
	/**
     *  Ðọc nội dung tệp theo kiểu nhị phân
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *  Results: nội dung tệp hoặc null nếu tệp không hợp lệ
    */ 
	public static function ReadBinary($filePath){
    	if(!file_exists($filePath)){
          return false;
        }else{      	
			fopen($filePath, 'rb');
			return file_get_contents($filePath);
	    }
	}
    
	/**
     *  Ghi nội dung tệp theo kiểu nhị phân
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @data: dữ liệu cần ghi
     *  Results: true nếu thành công và false nếu thất bại
    */ 
	public static function WriteBinary($filePath, $data){    
		if(!file_exists($filePath)){
			  return false;
		  }else{
			  $handle = fopen($filePath, 'wb');
			  fwrite($handle, $data);
			  fclose($handle);
			  return true;
		}
	}
    
	/**
     *  Ghi nội dung vào cuối tệp theo kiểu nhị phân
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @data: dữ liệu cần ghi
     *  Results: true nếu thành công và false nếu thất bại
    */ 
	public static function AppendBinary($filePath, $data){
	  $handle = fopen($filePath, 'a');
      fwrite($handle, $data);
	  self::WriteBinary($filePath, $data);
      fclose($handle);
      return true;
    }
    
    /**
     *  Ðổi tên tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @fileName: tên mới
     * Results: true nếu thành công và false nếu thất bại
    */
	public static function RenameFile($filePath, $fileName){
    	if(!file_exists($fileName)){
			rename($filePath,$fileName);
			return true;
		}else{
			return false;
		}
	}
    
	/**
     *  Xóa tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *  Results: true nếu thành công và false nếu thất bại
    */
	public static function DeleteFile($filePath){
         return unlink($filePath);
    }
    
    /**
     *  Sao chép tệp
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @destPath: đường dẫn lưu trữ tệp sao chép hoặc đường dẫn đến thư mục
     *  Results: true nếu thành công và false nếu thất bại
    */  
	public static function CopyFile($filePath, $destPath){
    	if(!file_exists($filePath)){
			return false;
    	}else if (is_dir($destPath)){
			$destPath=$destPath."/".self::GetFileName($filePath).".".self::GetFileExtension($filePath);
			copy($filePath,$destPath);
			return true;
		}else{
			copy($filePath,$destPath);
			return true;			
		}
	}
    
    /**
     *  Di chuyển tệp đến nơi khác
     *  Parameters
     *      @filePath: đường dẫn đến tệp
     *      @destPath: đường dẫn nơi lưu trữ mới
     * Results: true nếu thành công và false nếu thất bại
    */  
	public static function MoveFile($filePath, $destPath){
      	if(file_exists($filePath) && !file_exists($destPath) ){
			 if(self::CopyFile($filePath,$destPath))
			 	 self::DeleteFile($filePath);
				 return true;
		}else{
			return false;
		}
	}
	
}

